
include <BOSL2/std.scad>
include <BOSL2/gears.scad>
// =========================================================
// 全局参数
// =========================================================
mod_size = 1.5;     // 模数 (决定齿轮大小)
gear_thickness = 8;    // 所有齿轮的厚度
shaft_bore = 6;        // 轴孔直径

// 轴承参数 (示例：假设使用内径6mm, 外径12mm, 厚度4mm的轴承)
bearing_od = 12;
bearing_id = shaft_bore;
bearing_thickness = 4;

// 齿轮间隙和齿隙，对3D打印很重要
gear_clearance = 0.25 * mod_size; // 齿根间隙
gear_backlash = 0.05 * mod_size; // 齿隙，确保齿轮不会卡死

// 轮毂参数
hub_diam_mult = 1.8;   // 轮毂直径相对于轴孔直径的倍数
hub_thickness_mult = 1.5; // 轮毂厚度相对于齿轮厚度的倍数

// 齿轮层之间的Z轴额外间隙
z_offset_clearance = 2; // 确保不同层的齿轮和轴承不干涉

// 箱体壁厚
wall_thickness = 5;

// =========================================================
// 齿数定义 (1:100 三级减速：4x5x5)
// =========================================================
P1_teeth = 15; // 输入小齿轮
G1_teeth = P1_teeth * 4; // = 60 齿

P2_teeth = 15; // 中间小齿轮 (与 G1 同轴)
G2_teeth = P2_teeth * 5; // = 75 齿

P3_teeth = 15; // 中间小齿轮 (与 G2 同轴)
G3_teeth = P3_teeth * 5; // = 75 齿 (输出大齿轮)

// =========================================================
// 辅助齿轮模块 (用于封装 spur_gear 的通用参数)
// =========================================================
module _make_spur_gear(teeth_count) {
    spur_gear(
        teeth = teeth_count,
        mod = mod_size, // Changed 'module' to 'mod'
        pressure_angle = 20,
        clearance = gear_clearance,
        backlash = gear_backlash,
        thickness = gear_thickness
    );
}

// =========================================================
// 齿轮模块定义
// =========================================================
module pinion1() { _make_spur_gear(P1_teeth); }
module gear1() { _make_spur_gear(G1_teeth); }
module pinion2() { _make_spur_gear(P2_teeth); }
module gear2() { _make_spur_gear(G2_teeth); }
module pinion3() { _make_spur_gear(P3_teeth); }
module gear3() { _make_spur_gear(G3_teeth); }

// =========================================================
// 轴距计算
// =========================================================
// 分度圆半径
pitch_rad_P1 = (P1_teeth * mod_size) / 2;
pitch_rad_G1 = (G1_teeth * mod_size) / 2;
pitch_rad_P2 = (P2_teeth * mod_size) / 2;
pitch_rad_G2 = (G2_teeth * mod_size) / 2;
pitch_rad_P3 = (P3_teeth * mod_size) / 2;
pitch_rad_G3 = (G3_teeth * mod_size) / 2;

// 各级轴距
center_dist_stage1 = pitch_rad_P1 + pitch_rad_G1; // P1-G1
center_dist_stage2 = pitch_rad_P2 + pitch_rad_G2; // P2-G2
center_dist_stage3 = pitch_rad_P3 + pitch_rad_G3; // P3-G3

// =========================================================
// 轴位置定义 (X, Y, Z 坐标)
// 假设 Y=0，Z 轴递增以创建齿轮层
// Z 轴起始点设为齿轮厚度的一半，使齿轮居中于其层高
// =========================================================
shaft1_pos = [0, 0, gear_thickness / 2]; // 输入轴 (P1)

// 中间轴 1 (G1 和 P2)
// G1 在 X 轴上与 P1 错开一个 center_dist_stage1
// P2 与 G1 同轴，但 Z 轴高度不同
//shaft2_pos = [center_dist_stage1, 0, shaft1_pos.z + gear_thickness + z_offset_clearance]; // G1 的 Z 高度
shaft2_pos = [center_dist_stage1, 0, gear_thickness/2]; // G1 的 Z 高度
// 中间轴 2 (G2 和 P3)
// G2 在 X 轴上与 P2 错开一个 center_dist_stage2
// P3 与 G2 同轴，但 Z 轴高度不同
shaft3_pos = [center_dist_stage1 + center_dist_stage2, 0, shaft2_pos.z + gear_thickness + z_offset_clearance]; // G2 的 Z 高度

// 输出轴 (G3)
// G3 在 X 轴上与 P3 错开一个 center_dist_stage3
shaft4_pos = [center_dist_stage1 + center_dist_stage2 + center_dist_stage3, 0, shaft3_pos.z + gear_thickness + z_offset_clearance]; // G3 的 Z 高度

// =========================================================
// 齿轮组装模块
// =========================================================
module three_stage_gear_assembly() {
    // 轴 1：输入轴 (P1)
    color("red") {
        translate(shaft1_pos) pinion1();
    }

    // 轴 2：中间轴 1 (G1 和 P2)
    color("green") {
        translate(shaft2_pos) gear1(); // G1 放置在 shaft2_pos
    }
    color("purple") {
        // P2 与 G1 同轴，但 Z 轴更高
        translate([shaft2_pos.x, shaft2_pos.y, shaft2_pos.z + gear_thickness + z_offset_clearance]) {
            pinion2();
        }
    }

    // 轴 3：中间轴 2 (G2 和 P3)
    color("orange") {
        translate(shaft3_pos) gear2(); // G2 放置在 shaft3_pos
    }
    color("brown") {
        // P3 与 G2 同轴，但 Z 轴更高
        translate([shaft3_pos.x, shaft3_pos.y, shaft3_pos.z + gear_thickness + z_offset_clearance]) {
            pinion3();
        }
    }

    // 轴 4：输出轴 (G3)
    color("blue") {
        translate(shaft4_pos) gear3(); // G3 放置在 shaft4_pos
    }
}



three_stage_gear_assembly();

